知识点说明

  1. 在electron中有个Tray类,我们通过它就能创建和销毁小托盘.
  2. Tray类实例有两个常用方法:①setToolTip(),②setContextMenu().
  3. setToolTip()当你移动鼠标到小托盘上面,会出现提示用户的信息.
  4. setContextMenu()当你右键点击小图标时会出现菜单
  5. 有点绕的就是setContextMenu()设置的menu,当触发里面设置的菜单中的点击事件时,必须先发送事件给渲染进程,再通过渲染进程发送事件给主进程.

下面用实例片段来说明下(windows系统): 主进程

const path = require('path')
const {ipcMain,app,Menu,Tray} = require('electron')
//小托盘的引用
let appIcon;
//自定义菜单,准备小托盘用
const contextMenu = Menu.buildFromTemplate([
    {
       label:'remove',
       //这里有点绕,这个事件是发送给渲染进程的,再由渲染进程告诉进程
       click:(event) =>{
           event.sender.send('tell-renderer-to-remove-tray')
       }     
    }
])

//监听渲染进程的put-in-tray事件,创建托盘实例,要重点掌握
ipcMain.on('put-in-tray',(event)=>{
    //托盘图片所在路径,图片尺寸是24的png
    const iconPath=path.join(__dirname,images/icon.png)
    //创建托盘(这一步就有了小托盘)
    appIcon=new Tray(iconPath)
    //给鼠标移动到托盘的小提示
    appIcon.setToolTip('我是提示')
    //给托盘绑定菜单
    appIcon.setContextMenu(contextMenu)
})

//监听渲染进程的'remove-tray'事件,摧毁托盘实例
ipcMain.on('remove-tray',()=>{
    appIcon.destroy()
})

渲染进程

const {ipcRenderer} = require('electron')
//我们绑定了一个按钮用来控制托盘
const trayBtn = document.getElementById('put-in-tray')

//按钮监听点击事件,发送put-in-tray给主进程
trayBtn.addEventListener('click',()=>{
    ipcRenderer.send('put-in-tray')
})
//接收主进程返回的tell-renderer-to-remove-tray事件,发送remove-tray给主进程
ipcRenderer.on('tell-renderer-to-remove-tray',()=>{
    ipcRenderer.send('remove-tray')
})

把托盘融入个人工具中

主进程

//托盘菜单
const trayMenu = Menu.buildFromTemplate([
    {
       label:'退出',
       click:(event) =>{
            // event.sender.send('prepare-detroy-tray')
            app.quit()
       }     
    }
])
//监听创建托盘事件
ipcMain.on('create-tray',(event)=>{
    const iconPath=path.join(__dirname,'images/icon.png')
    appIcon=new Tray(iconPath)
    appIcon.setToolTip('个人工具')
    appIcon.setContextMenu(trayMenu)
    //绑定点击事件,显示窗口,并摧毁托盘
    appIcon.on('click',()=>{
        mainWindow.show();
        appIcon.destroy()
    })
    //隐藏窗口
    mainWindow.hide();
})

渲染进程

//最小化托盘
$("#minBtn").on('click',()=>{
    ipcRenderer.send('create-tray');
})

结束语

具体代码可以到我的仓库下载代码

THE END
推荐文章
  • 从黄帝内经领悟的养生法则

  • 写作前树立的观念-用户思维

  • 在服务器上给docker的mysql创建新用户,并禁止root远程登录

  • 如何让子女成龙成凤

  • 黄帝内经-第十八篇-平人气象论篇(3)

  • npm脚本问题汇总

  • taro报错 Can't resolve './style/index.scss'

  • 黄帝内经-阴阳应象大论篇(3)

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字